package model

import (
	"ginblog/utils/errmsg"
	"github.com/jinzhu/gorm"
)

type Artical struct {
	Category Category `gorm:"foreignkey:Cid"`
	gorm.Model
	Title   string `gorm:"type:varchar(100);not null" json:"title"`
	Cid     int    `gorm:"type:int;not null" json:"cid"`
	Desc    string `gorm:"type:varchar(200);not null" json:"desc"`
	Context string `gorm:"type:longtext;not null" json:"context"`
	Img     string `gorm:"type:varchar(100);not null" json:"img"`
}


// 新增文章
func CreateArtical(data *Artical) int {

	err := db.Create(&data).Error
	if err != nil {
		return errmsg.ERROR
	}
	return errmsg.SUCC
}
// todo 查询分类下的所有文章
func GetCateArt(cid int,pageSize int,pageNum int) ([]Artical,int) {
	var cateArtList []Artical
	err = db.Preload("Category").Limit(pageSize).Offset((pageNum - 1) * pageSize).Where("cid=?",cid).Find(&cateArtList).Error
	if err != nil{
		return nil,errmsg.ERROR
	}
	return cateArtList,errmsg.SUCC
}

// todo 查询单个文章
func GetArtInfo(id int) (Artical,int) {
	var art Artical
	err = db.Preload("Category").Where("id = ?",id).First(&art).Error
	if err != nil {
		return art,errmsg.ERROR
	}
	return art,errmsg.SUCC


}
//  查询文章列表
// 如果数据量大的话，在查询数据列表时，首先要进行的就是分页操作
func GetArticalList(pageSize int, pageNum int) ([]Artical,int) {
	var articalList []Artical
	err = db.Preload("Category").Limit(pageSize).Offset((pageNum - 1) * pageSize).Find(&articalList).Error
	if err != nil && err != gorm.ErrRecordNotFound {
		return nil,errmsg.ERROR
	}
	return articalList,errmsg.SUCC
}

// 编辑分类
// 使用map进行传参
func EditArtical(id int, data *Artical) int {
	var artical Artical
	var maps = make(map[string]interface{})
	maps["title"] = data.Title
	maps["cid"] = data.Cid
	maps["desc"] = data.Desc
	maps["context"] = data.Context
	maps["img"] = data.Img
	err = db.Model(&artical).Where("id = ?", id).Updates(maps).Error
	if err != nil {
		return errmsg.ERROR
	}
	return errmsg.SUCC
}

// 删除分类
func DeleteArtical(id int) int {
	var artical Artical
	// 软删除
	err = db.Where("id = ?", id).Delete(&artical).Error
	if err != nil {
		return errmsg.ERROR
	}
	return errmsg.SUCC
}
